home *** CD-ROM | disk | FTP | other *** search
Text File | 1998-09-25 | 2.7 KB | 122 lines | [TEXT/CWIE] |
- /*
- File: MoreAppleEvents.cp
-
- Contains:
-
- Written by: Pete Gontier (PCG)
-
- Copyright: Copyright (c) 1998 Apple Computer, Inc.
-
- Change History (most recent first):
-
- <2> 6/16/98 PCG CreateProcessTarget works with nil PSN
- <1> 6/16/98 PCG initial checkin
- */
-
-
- #include "MorePrefix.h"
- #include "MoreAppleEvents.h"
- #include "MoreProcesses.h"
-
- pascal OSErr SetReplyErrorNumber (OSErr errToReport, AppleEvent *reply)
- {
- OSErr err = noErr;
-
- if (reply->dataHandle)
- {
- if (!MoreAssert (reply->descriptorType == typeAppleEvent))
- err = paramErr;
- else
- err = AEPutParamPtr (reply,keyErrorNumber,typeShortInteger,&errToReport,sizeof(errToReport));
- }
-
- return err;
- }
-
- pascal OSErr SenderIsFinder (const AppleEvent *event, Boolean *isFinder)
- {
- if (!MoreAssert (event && isFinder)) return paramErr;
- if (!MoreAssert (event->descriptorType == typeAppleEvent)) return paramErr;
- if (!MoreAssert (event->dataHandle)) return paramErr;
-
- OSErr err = noErr;
- DescType actualType;
- ProcessSerialNumber senderPSN;
- Size actualSize;
-
- err = AEGetAttributePtr (event, keyAddressAttr, typeProcessSerialNumber, &actualType,
- (Ptr) &senderPSN, sizeof (senderPSN), &actualSize);
- if (MoreAssert (err == noErr))
- {
- if (!MoreAssert (actualType == typeProcessSerialNumber))
- err = paramErr;
- else if (!MoreAssert (actualSize == sizeof (senderPSN)))
- err = paramErr;
- else
- {
- ProcessInfoRec processInfo;
-
- if (!(err = GetSomeProcessInfo (&senderPSN,&processInfo)))
- {
- *isFinder = (processInfo.processSignature == 'MACS' && processInfo.processType == 'FNDR');
- }
- }
- }
-
- return err;
- }
-
- pascal OSErr CreateProcessTarget (ProcessSerialNumber *psn, AEDesc *target)
- {
- ProcessSerialNumber self;
-
- if (!psn)
- {
- psn = &self;
-
- self.lowLongOfPSN = kNoProcess;
- self.highLongOfPSN = kCurrentProcess;
- }
-
- return AECreateDesc (typeProcessSerialNumber,psn,sizeof(*psn),target);
- }
-
- pascal OSErr CreateSimpleAppleEvent
- (AEEventClass eventClass, AEEventID eventID, ProcessSerialNumber *psn, AppleEvent *result)
- {
- OSErr err = noErr;
-
- AEDesc target;
-
- if (!(err = CreateProcessTarget (psn,&target)))
- {
- OSErr err2;
-
- err = AECreateAppleEvent (eventClass,eventID,&target,kAutoGenerateReturnID,kAnyTransactionID,result);
-
- err2 = AEDisposeDesc (&target);
- if (!err) err = err2;
- }
-
- return err;
- }
-
- pascal OSErr SimplySendAppleEvent (const AppleEvent *appleEvent, AppleEvent *reply)
- {
- OSErr err = noErr;
-
- AESendMode aeSendMode = kAEAlwaysInteract | kAECanSwitchLayer;
-
- if (reply)
- {
- aeSendMode |= kAEWaitReply;
-
- reply->descriptorType = typeNull;
- reply->dataHandle = nil;
- }
-
- err = AESend (appleEvent, reply, aeSendMode, kAENormalPriority, kAEDefaultTimeout, nil, nil);
-
- return err;
- }
-